package Objetos 
{
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import Levels.Level;
	/**
	 * ...
	 * @author Rodrigo Forti
	 */
	public class Heroi extends MovieClip
	{
		protected var NB_velocidadeY			:Number;
		protected var NB_velocidadeX			:Number;
		protected var NB_gravidade				:Number;
		
		protected var BO_dir					:Boolean;
		protected var BO_esq					:Boolean;
		public var BO_pulando					:Boolean;
		public var BO_morreu					:Boolean;
		public var BO_pegouUpgrade				:Boolean;
		
		protected var MC_tiro					:Tiro;
		
		public var UI_vida						:uint;
		public var UI_player					:uint;
		
		public function Heroi(player:uint) 
		{
			NB_velocidadeY = 0;
			NB_gravidade = 0.9;
			NB_velocidadeX = 5;
			
			UI_vida = 10;
			UI_player = player;
			
			
			Main.getStage().addEventListener(KeyboardEvent.KEY_DOWN, pressionar, false, 0, true);
			Main.getStage().addEventListener(KeyboardEvent.KEY_UP, soltar, false, 0, true);
		}
		
		public function diminuirVida():void
		{
			UI_vida--;
			
			if (UI_vida <= 0)
			{
				Main.getStage().removeEventListener(KeyboardEvent.KEY_DOWN, pressionar);
				Main.getStage().removeEventListener(KeyboardEvent.KEY_UP, soltar);
				BO_morreu = true;
			}
		}
		
		public function update():void
		{
			this.y += NB_velocidadeY;
			NB_velocidadeY += NB_gravidade;
			
			controlarHeroi();
		}
		
		public function pressionar(e:KeyboardEvent):void
		{
			if (UI_player == 1)
			{
				switch (e.keyCode)
				{
					case Keyboard.D:
						BO_dir = true;
						if (this.scaleX < 0)
						{
							this.scaleX *= -1
						}
						break;
						
					case Keyboard.A:
						BO_esq = true;
						if (this.scaleX > 0)
						{
							this.scaleX *= -1
						}
						break;
						
					case Keyboard.SPACE:
						criarTiro();
						break;
				}
				
				if (BO_pulando == false)
				{
					switch (e.keyCode)
					{
						case Keyboard.W:
						NB_velocidadeY -= 13;
						BO_pulando = true;
						break;
					}
				}
			}
			
			if (UI_player == 2)
			{
				switch (e.keyCode)
				{
					case Keyboard.RIGHT:
						BO_dir = true;
						if (this.scaleX < 0)
						{
							this.scaleX *= -1
						}
						break;
						
					case Keyboard.LEFT:
						BO_esq = true;
						if (this.scaleX > 0)
						{
							this.scaleX *= -1
						}
						break;
						
					case Keyboard.NUMPAD_0 :
						criarTiro();
						break;
				}
				
				if (BO_pulando == false)
				{
					switch (e.keyCode)
					{
						case Keyboard.UP:
						NB_velocidadeY -= 13;
						BO_pulando = true;
						break;
					}
				}
			}
		}
		
		
		public function criarTiro():void
		{
			if (UI_player == 1)
			{
				if (this.scaleX > 0)
				{
					MC_tiro = new Tiro("direita","vermelho",UI_player, BO_pegouUpgrade);
					MC_tiro.x = this.x + 10;
				}
				
				else 
				{
					MC_tiro = new Tiro("esquerda","vermelho",UI_player, BO_pegouUpgrade);
					MC_tiro.x = this.x - 10;
				}
			}
			
			if (UI_player == 2)
			{				
				if (this.scaleX > 0)
				{
					MC_tiro = new Tiro("direita","amarelo",UI_player, BO_pegouUpgrade);
					MC_tiro.x = this.x + 10;
				}
				
				else 
				{
					MC_tiro = new Tiro("esquerda","amarelo",UI_player, BO_pegouUpgrade);
					MC_tiro.x = this.x - 10;
				}	
			}
				
					MC_tiro.y = this.y;
					Main.getInstance().MC_tela.addChild(MC_tiro);
					Level.AR_tiros.push(MC_tiro);
			
		}
		
		public function soltar (e:KeyboardEvent):void
		{
			if (UI_player == 1)
			{
				switch (e.keyCode)
				{
					case Keyboard.D:
						BO_dir = false;
						break;
						
					case Keyboard.A:
						BO_esq = false;
						break;
				}
			}
			
			if (UI_player == 2)
			{
				switch (e.keyCode)
				{
					case Keyboard.RIGHT:
						BO_dir = false;
						break;
						
					case Keyboard.LEFT:
						BO_esq = false;
						break;
				}
			}
		}
		
		public function controlarHeroi():void
		{
			if (BO_dir)
			{
				this.x += NB_velocidadeX;
			}
			
			if (BO_esq)
			{
				this.x -= NB_velocidadeX;
			}
		}
		
		public function set trocarVelocidadeY(a:Number):void
		{
			NB_velocidadeY = a;
		}
		
		public function get getVelocidadeY():Number
		{
			return this.NB_velocidadeY;
		}
		
	}

}